package com.gitee.wsl.compose.state.ext

import androidx.compose.runtime.snapshots.Snapshot
import com.gitee.wsl.compose.state.S


//全局 Snapshot
/**
 * // 创建状态（主线开发）
 *    val state = mutableStateOf(1)
 *
 *    // 创建快照（开分支）
 *    val snapshot = Snapshot.takeSnapshot()
 *
 *    // 修改状态（主线修改状态）
 *    state.value = 2
 *
 *    println(state.value) // 打印1
 *
 *    snapshot.enter {//进入快照（切换分支）
 *         // 读取快照状态（分支状态）
 *        println(state.value) // 打印1
 *    }
 *    // snapshot.apply() 保存快照（下面print statr打印1）
 *
 *    // 读取状态（主线状态）
 *    println(state.value) // 打印2
 *
 *    // 废弃快照（删除分支）
 *    snapshot.dispose()
 *
 */
fun S.takeSnapshot(
    readObserver: ((Any) -> Unit)? = null
) = Snapshot.takeSnapshot(readObserver)

fun S.registerGlobalWriteObserver(observer: ((Any) -> Unit)) = Snapshot.registerGlobalWriteObserver(observer)

fun S.registerApplyObserver(observer: (Set<Any>, Snapshot) -> Unit) = Snapshot.registerApplyObserver(observer)

/**
 * class ViewModel {
 *     val state = mutableStateOf("initialized")
 * }
 *
 * fun main() {
 *     val viewModel = ViewModel()
 *     Snapshot.registerApplyObserver { changedSet, snapshot ->
 *         changedSet.forEach {
 *             println("registerApplyObserver:" + it)
 *         }
 *     }
 *     viewModel.state.value = "one"
 *     Snapshot.sendApplyNotifications() //
 * }
 */
fun S.sendApplyNotifications() = Snapshot.sendApplyNotifications()
